package edu.math.chaos.api;

/**
 * Итерированная функция z^2 + c
 *
 * User: ilya
 * Date: 15.11.13
 * Time: 18:50
 */
public class IteratedPolinom {

    private ComplexNumber c;
    private ComplexNumber current;

    /**
     * @param c Константа c для полинома.
     */
    public IteratedPolinom(ComplexNumber c) {
        if (c == null) {
            throw new RuntimeException("Не задана константа c для полинома");
        }

        this.c = c;
    }

    /**
     * Вычисляет полином в заданной точке.
     *
     * @param z Точка для вычисления полинома.
     * @return Значение полинома в точке.
     */
    public ComplexNumber evaluate(ComplexNumber z) {
        if (z == null) {
            return null;
        }

        return z.multiply(z).plus(c);
    }

    public void setInitial(ComplexNumber z0) {
        current = z0;
    }

    public ComplexNumber next() {
        if (current == null) {
            return null;
        }

        return (current = evaluate(current)).copy();
    }
}
